package com.learn.dubbo.core.redis.Interface;

import java.util.Map;
import java.util.Set;


public interface JedisSortSet extends JedisBaseInterface {

	/**
     * 向集合中增加一条记录,如果这个值已存在，这个值对应的权重将被置为新的权重
     *
     * @param String
     *            key
     * @param double score 权重(排序字段)
     * @param String
     *            member 要加入的值，
     * @return 状态码 1成功，0已存在member的值
     * */
    public long zadd(String key, double score, String member);
    public long zadd(String key, Map<String, Double> scoreMembers);
    
    /**
     * 获取集合中元素的数量
     *
     * @param String
     *            key
     * @return 如果返回0则集合不存在
     * */
    public long zcard(String key);
    
    /**
     * 获取指定权重区间内集合的数量
     *
     * @param String
     *            key
     * @param double min 最小排序位置
     * @param double max 最大排序位置
     * */
    public long zcount(String key, double min, double max);
    
    /**
     * 如果在名称为key的zset中已经存在元素member，则该元素的score增加increment；否则向集合中添加该元素，其score的值为increment
     *
     * @param String
     *            key
     * @param double score 要增的权重
     * @param String
     *            member 要插入的值
     * @return 增后的权重
     * */
    public double zincrby(String key, double score, String member);
    
    /**
     * 返回指定位置的集合元素,0为第一个元素，-1为最后一个元素
     * 返回名称为key的zset（元素已按score从小到大排序）中的index从start到end的所有元素
     * @param String
     *            key
     * @param int start 开始位置(包含)
     * @param int end 结束位置(包含)
     * @return Set<String>
     * */
    public Set<String> zrange(String key, int start, int end);
    
    /**
     * 返回指定位置的集合元素,0为第一个元素，-1为最后一个元素
     * 返回名称为key的zset（元素已按score从大到小排序）中的index从start到end的所有元素
     * @param String
     *            key
     * @param int start 开始位置(包含)
     * @param int end 结束位置(包含)
     * @return Set<String>
     * */
    public Set<String> zrevrange(String key, int start, int end);
    
    /**
     * 返回指定权重区间的元素集合
     *
     * @param String
     *            key
     * @param double min 上限权重
     * @param double max 下限权重
     * @return Set<String>
     * */
    public Set<String> zrangeByScore(String key, double min, double max);
    
    /**
     * 获取指定值在集合中的位置，集合排序从低到高
     * 返回名称为key的zset（元素已按score从小到大排序）中member元素的rank（即index，从0开始），若没有member元素，返回“nil”
     *
     * @see zrevrank
     * @param String
     *            key
     * @param String
     *            member
     * @return long 位置
     * */
    public long zrank(String key, String member);
    
    /**
     * 获取指定值在集合中的位置，集合排序从高到低
     *
     * @see zrank
     * @param String key
     * @param String member
     * @return long 位置
     * */
    public long zrevrank(String key, String member);
    
    /**
     * 从集合中删除成员
     *
     * @param String key
     * @param String member
     * @return 返回1成功
     * */
    public long zrem(String key, String member);
    
    /**
     * 删除给定位置区间的元素
     *
     * @param String
     *            key
     * @param int start 开始区间，从0开始(包含)
     * @param int end 结束区间,-1为最后一个元素(包含)
     * @return 删除的数量
     * */
    public long zremrangeByRank(String key, int start, int end) ;
    
    /**
     * 删除给定权重区间的元素
     *
     * @param String
     *            key
     * @param double min 下限权重(包含)
     * @param double max 上限权重(包含)
     * @return 删除的数量
     * */
    public long zremrangeByScore(String key, double min, double max) ;
    
    /**
     * 获取给定值在集合中的权重
     * @param String  key
     * @param memeber
     * @return double 权重
     * */
    public double zscore(String key, String memebr);


}
